package com.tangruojie.page;

import java.util.Collections;
import java.util.List;

public class PageUtils {

    /**
     * 对 List<T> 进行分页截取
     */
    public static <T> PageResult<T> paginate(List<T> fullList, int pageNum, int pageSize) {
        /**
         * 计算总页数
         */
        int total = fullList.size();
        /**
         * 截取的开始索引不能超过总页数
         */
        int fromIndex = (pageNum - 1) * pageSize;
        /**
         * 截取的结束索引不能超过总页数
         */
        int toIndex = Math.min(fromIndex + pageSize, total);
        /**
         * 截取的子列表
         */
        List<T> pageList;
        if (fromIndex >= total || fromIndex < 0) {
            /**
             * 截取的开始索引不能小于0
             */
            pageList = Collections.emptyList(); // 防止页码越界
        } else {
            /**
             * 截取子列表
             */
            pageList = fullList.subList(fromIndex, toIndex);
        }
        return new PageResult<>(total, pageNum, pageSize, pageList);
    }

}

